#ifndef WIDGET_H
#define WIDGET_H

#include "qlistwidget.h"
#include <QWidget>
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QSqlError>
#include<QMessageBox>

#include<QNetworkAccessManager> //网络访问管理器
#include<QNetworkRequest>     //网络求情封装
#include<QNetworkReply>        //网络请求回复

#include<QTimer>
#include<QElapsedTimer>    //高精度

#include<QJsonDocument>
#include<QJsonObject>
#include<QJsonArray>

#include<QListWidget>
#include<QMenu>

#include<QCryptographicHash>          //引入加密哈希计算头文件

#include<QInputDialog>


#include<QFile>
#include <QSystemTrayIcon>

#include<QThread>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    QNetworkAccessManager *networkmanger;

    QElapsedTimer elapsedTimer;
    QTimer *timer;

    int m_loginAttempts=0;                 //密码错误次数
    bool m_isLocked;                          //是否加锁
    QTimer *m_unlockTimer;             //解锁时间

    QSystemTrayIcon *trayIcon;    // 托盘图标对象
    QMenu *trayMenu;              // 托盘菜单



    QByteArray getStorePasswordHash();      //获取存储的密码哈希

    QByteArray getStoredPasswordHash();    //数据库密码

    //存储历史记录到数据库
    void setupDatabase();    //初始化数据库链接

    void saveAnswer(const QString &answer);  //保存提问记录

    void loadHistory();   //加载历史记录

    QString getAnswerForQuestion(const QString& question);        //获取历史问题答案

    bool saveQuestion(const QString&question); //保存提问记录

    // 新增托盘初始化函数
    void setupTrayIcon();

private slots:
    void handleResponse(const QByteArray &data) ;
     void updateTimerLabel();                   //更新耗时时间
    void onDownloadProgress(qint64 bytesReceived,qint64 bytesTotal);       //更新进度条

    void onTrayIconActivated(QSystemTrayIcon::ActivationReason reason);

     void showDeletelistContextMenu(const QPoint &pos);        //删除菜单

    void on_listWidget_history_itemClicked(QListWidgetItem *item);

     void on_pushButton_exit_clicked();
    void on_pushButton_commit_clicked();
     void on_pushButton_administ_clicked();

    void closeEvent(QCloseEvent *event);
};

class NetworkThread : public QThread {
    Q_OBJECT
public:
    // 构造函数：接收网络请求数据并保存
    explicit NetworkThread(const QByteArray &data, QObject *parent = nullptr);

signals:
    // 信号：请求成功时发送响应数据
    void responseReady(const QByteArray &data);
    // 信号：请求失败时发送错误信息
    void errorOccurred(const QString &error);

protected:
    // 重写 run() 方法：线程入口函数（子线程执行此函数）
    void run() override;

private:
    QByteArray m_data; // 存储网络请求数据
};



#endif // WIDGET_H




//
